package br.com.foxinline.manager.criar;

import br.com.foxinline.enums.TipoPessoa;
import br.com.foxinline.modelo.*;
import br.com.foxinline.servico.BairroServico;
import br.com.foxinline.servico.CartorioServico;
import br.com.foxinline.servico.CidadeServico;
import br.com.foxinline.utilitario.Caracteres;
import br.com.foxinline.utilitario.Mensagem;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author cadomeireles
 */
@ViewScoped
@ManagedBean
public class ManagerCriarCartorio implements Serializable {

    @EJB
    CartorioServico cartorioServico;
    @EJB
    CidadeServico cidadeServico;
    @EJB
    BairroServico bairroServico;
    
    private Cartorio cartorio;

    String editarId;

    @PostConstruct
    public void init() {
        instanciar();
        delegar();
    }

    private void instanciar() {
        this.cartorio = new Cartorio();
        this.cartorio.setEndereco(new Endereco());
        this.cartorio.setTelefone(new Telefone());
        this.cartorio.setTitular(new Pessoa());
        this.cartorio.getTitular().setEndereco(new Endereco());
    }

    private void delegar() {
        Map<String, String> parametros = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap();
        this.editarId = parametros.get("cartorioId");
        
        if (editarId != null) {
            this.cartorio = cartorioServico.pesquisar(Long.parseLong(editarId));
        }
    }

    public void salvar() {
        
        // removendo máscaras
        this.cartorio.getEndereco().setCep(Caracteres.removecaracter(this.cartorio.getEndereco().getCep()));
        this.cartorio.getTitular().setCpf(Caracteres.removecaracter(this.cartorio.getTitular().getCpf()));
        this.cartorio.getTitular().getEndereco().setCep(Caracteres.removecaracter(this.cartorio.getTitular().getEndereco().getCep()));

        if (this.cartorio.getId() == null) {
            this.cartorio.getTitular().setTipoPessoa(TipoPessoa.FISICA);
            cartorioServico.salvar(this.cartorio);
            instanciar();        
        } else {
            cartorioServico.atualizar(this.cartorio);
        }
        
        Mensagem.messagemInfo("Cartório cadastrado com sucesso!");

    }
    
    public List<Cidade> autocompletarCidade(String query) {
        return cidadeServico.autocompletar(query);
    }
    
    public List<Bairro> autocompletarBairro(String query) {
        return bairroServico.autocompletar(query);
    }    
    
    public Cartorio getCartorio() {
        return cartorio;
    }

    public void setCartorio(Cartorio cartorio) {
        this.cartorio = cartorio;
    }

}
